# -*- coding: utf-8 -*-
"""
@Time ： 2020/8/4 20:32
@Auth ： Mr. William 1052949192
@Company ：特斯汀学院 @testingedu.com.cn
@Function ：面向对象，类
"""
# 全局变量
usage = "面向对象"


class Dog:
    """
    创建一个狗类
    """

    # 类变量-狗的属性，写在类里面，函数外面的变量
    dog_type = None
    __my_type = None

    def __init__(self, n):
        """
        每个类都有构造方法。
        如果没有显式地定义构造方法，
        在运行的时候将会为该类提供一个默认构造方法
        在创建对象的时候会调用构造函数
        构造函数的作用：创建对象
        构造函数只能有一个
        有参数列表，必须传参数列表
        """
        global usage
        print(usage)
        # 实例变量
        self.name = n
        # 私有变量
        self.__my_name = n

    def __my_test(self):
        print('这是一个私有方法')

    def bark(self, t):
        """
        实例函数：狗叫
        实例函数第一个参数一定是self，代表实例本身，不需要传入
        :return: None
        """
        if True:
            h = '局部变量'
            print(h)

        print(self.name + '在叫：汪汪汪！')
        print('一直叫了' + t)
        print(self.__my_name)

    @classmethod
    def __set_type(cls, t):
        """
        类函数：设置狗的品种
        类函数的第一个参数必须是cls，代表类本身，不需要传
        :return: 狗的种类
        """
        cls.dog_type = t

    @classmethod
    def get_type(cls):
        """
        获取狗的品种
        :return: 狗的品种
        """
        return cls.dog_type

    def set_dog_name(self, n):
        """
        改名字
        :param n: 需要改的名字
        :return: None
        """
        self.name = n
        print(usage)
